import router from '@/router'
import axios from 'axios'
import { ElMessage } from 'element-plus'
import userUserStore from '@/stores/user.ts'

// 创建了axios实例, 使用的是自己的配置项
const instance = axios.create({
  baseURL: '/ftyyptapi', // 环境变量
  timeout: 3000, // request timeout
  headers: { 'Content-type': 'application/x-www-form-urlencoded' },
})

//请求拦截器
instance.interceptors.request.use(
  (config) => {
    // 一般代码这样写
    // config.headers.Authorization = "Bearer token字符串"

    // 当前项目： 请求头中配置token
    // config.headers.token = token字符串
    // const user = userUserStore() 定义在函数里,如果在全局拦截器拦截前,user对象还未创建,拿不到token,登录请求就都被拦截

    const user = userUserStore()
    const token = user.userinfo.token
    // console.log('创建用户', token)
    if (token) {
      config.headers.token = token
    }
    return config
  },
  (err) => {
    return Promise.reject(err)
  },
)

//响应拦截器
instance.interceptors.response.use(
  (response) => {
    const user = userUserStore()
    //成功响应
    if (response.data.state != 201 && response.data.state != 200) {
      //发生业务错误
      //1.跳转到登录页
      // router.push('/login')
      //2.给出错误提示
      ElMessage.error(response.data.msg)
      //3.400清空用户信息
      // user.logout()
      //4.return异常
      return Promise.reject(response)
    } else {
      return response
    }
  },
  (err) => {
    //失败响应  err.response.sattus === 4xx 客户端错误 5xxx 服务器错误
    return Promise.reject(err)
  },
)

export default instance
